package database;

import groupmanagement.AnmeldeStatus;
import groupmanagement.Gruppe;
import groupmanagement.Gruppenart;
import groupmanagement.IGruppe;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import partnermanagement.Geschlecht;

import partnermanagement.IKind;
import partnermanagement.Kind;
import superkigav.shared.rightsmanagement.UserTicket;

public class GruppeDAO implements IGruppeDAO {
	private IKindDAO kindDAO;
	private  IDBConnector idbconnector;


	public GruppeDAO() {
		this.idbconnector = DBConnectorMySQL.getInstance();
		this.kindDAO = new KindDAO();
	}
	
	/* (non-Javadoc)
	 * @see database.IGruppeDAO#addGruppe(groupmanagement.IGruppe)
	 */
	@Override
	public void addGruppe(IGruppe gruppe, UserTicket ut){
		//TODO
	}
	
	/* (non-Javadoc)
	 * @see database.IGruppeDAO#deleteGruppe(groupmanagement.IGruppe)
	 */
	@Override
	public void deleteGruppe(IGruppe gruppe, UserTicket ut){
		//TODO
	}
	
	/* (non-Javadoc)
	 * @see database.IGruppeDAO#updateGruppe(groupmanagement.IGruppe)
	 */
	@Override
	public void updateGruppe(IGruppe gruppe, UserTicket ut){
		
		
	}
	
	/* (non-Javadoc)
	 * @see database.IGruppeDAO#findAll(superkigav.shared.rightsmanagement.UserTicket)
	 */
	@Override
	public List<IGruppe> findAll(UserTicket ut){
		ResultSet resultSet = null;
		try {
			
			String Statement = ("select * from Gruppe;");
			resultSet = idbconnector.query(Statement);
		 } catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		return buildGruppen(resultSet, ut);
	}
	
	
	private List<IGruppe> buildGruppen(ResultSet resultSet, UserTicket ut){
		 List<IGruppe> result = new ArrayList<IGruppe>();
		 try {

				while (resultSet.next()) {
	                            int GruppenID = resultSet.getInt("idGruppe");
	                            String Gruppenname = resultSet.getString("Name");
	                            Gruppenart gruppenart = Gruppenart.valueOf(resultSet.getString("GruppenArt"));
	                            boolean hasFrueh = resultSet.getBoolean("hasFrueh");
	                            boolean hasSpaet = resultSet.getBoolean("hasSpaet");
	                            int limit = resultSet.getInt("Limit");
	                            IGruppe gruppe = new Gruppe(GruppenID, Gruppenname, gruppenart, hasFrueh, hasSpaet, limit);
	                            // TODO Map<AnmeldeStatus,List<IKind>> temp = kindDAO.getKinderByGruppe(gruppe, ut);
	                            // TODO gruppe.setAngemeldet(temp.get(AnmeldeStatus.ANGEMELDET));
	                            // TODO gruppe.setWarteliste(temp.get(AnmeldeStatus.WARTELISTE));
	                            result.add(gruppe);
					
				}
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		return result;
	}
}
